<?php

abstract class AbstractDesignTimeWorkflowDecorator extends DesignTimeWorkflow
{
  
  /**
   * @var DesignTimeWorkflow
   */
  protected $decoratee;

  /**
   * @param DesignTimeWorkflow $decoratee
   */
  public function __construct (DesignTimeWorkflow $decoratee)
  {
    $this->decoratee = $decoratee;
  }

  /**
   * @return DesignTimeWorkflow
   */
  public function getDecoratee ()
  {
    return $this->decoratee;
  }

  /**
   * @return DesignTimeWorkflow
   */
  public function startNode ($identifier = 'start')
  {
    $this->decoratee->startNode($identifier);
    return $this;
  }

  /**
   * @return DesignTimeWorkflow
   */
  public function endNode ($identifier = 'end')
  {
    $this->decoratee->endNode($identifier);
    return $this;
  }

  /**
   * @param AbstractDesignTimeWorkflowNode $node
   * @return DesignTimeWorkflow
   */
  public function followedBy (AbstractDesignTimeWorkflowNode $node)
  {
    $this->decoratee->followedBy($node);
    return $this;
  }

  /**
   * @param string $identifier
   * @param mixed $param1
   * @return ForeachableSplitDesignTimeWorkflowNode
   */
  public function followedByParallelSplitWithForeachable ($identifier, $param1)
  {
    $this->decoratee->followedByParallelSplitWithForeachable($identifier, $param1);
    return $this;
  }

  /**
   * @param AbstractRecipientDeterminationRule $recipient
   */
  public function forRecipient (AbstractRecipientDeterminationRule $recipient)
  {
    $this->decoratee->forRecipient($recipient);
    return $this;
  }

  public function mapIn ($src_key, $target_key)
  {
    $this->decoratee->mapIn($src_key, $target_key);
    return $this;
  }
  
  public function addAction(DesignTimeWorkflowNodeAction $action) {
    $this->decoratee->addAction($action);
    return $this;
  }
}